作者 / Smule 工程团队: David Gayle、Chris Manchester、Mark Gills、Trayko Traykov、Randal Leistikow、Mariya Ivanova。
作为目前下载量排名前列的唱歌类应用,Smule Inc. 一直致力于投入大量资源来提升其应用的 Android 体验,以提高整体音频质量。具体而言就是减少延迟时间,让歌手在表演时能够通过耳机听到自己的声音。擅长音频和视频技术的团队在 2021 年很大一部分时间都忙于必需的提升工作,将逾千万 Android 用户使用的 Smule 应用从使用 OpenSL 音频 API 转换为使用 Oboe 音频库,从而使录制完成率提高了约 10% 以上。- Smule
https://play.google.com/store/apps/details?id=com.smule.singandroid
Smule Inc. 是卡拉 OK 应用的潮流企业,旗下的应用每天帮助数百万用户演唱最爱的歌曲,并分享表演。Smule 应用超越了传统的卡拉 OK,专注于共同创作,为用户创造了独一无二的机会,可以与朋友、平台上的其他歌手及其最喜欢的音乐人分享音乐和合作。而音频质量至关重要,Smule 团队在 2020 年看到了在 Android 平台提升体验的潜力。
Smule 使用的旧版 OpenSL 虽然支持全球市场的各种设备,但不太适合利用新设备的高速硬件。Smule 开发团队认为,升级音频系统是必要且合乎逻辑的改进。
Smule 曾面对两种可行的改进途径,第一种是针对 AAudio 进行改进,这是 Android O 中引入的高性能 Android C 音频 API,专为需要低延迟的应用而设计。第二种是采用在内部同时封装了 AAudio 和 OpenSL 的 Oboe。经过细致评估,Smule 开发团队选择了 Oboe,此方案具有易用的代码库、广泛的设备兼容性和强大的社区支持,可最大限度减少延迟时间,并充分利用可用的原生音频。
- AAudio
https://developer.android.google.cn/ndk/guides/audio/aaudio/aaudio - Oboe
https://developer.android.google.cn/games/sdk/oboe
改用 Oboe 意味着在应用架构和技术上将发生重大的变化。因此,Smule 在更新过程中采取了谨慎的做法,有计划地逐步发布,首先面向少数的特定设备型号以验证质量;然后逐渐地面向更多设备 (将少数使用 Oboe 时出现问题的设备恢复到 OpenSL)。这种循序渐进、有条不紊的方法可以最大限度地降低风险,并让开发团队能够在出现设备特定问题时及时处理。
Smule 改用 Oboe 来帮助改善应用体验。他们希望大幅降低音频播放崩溃率,消除录制时的回响和噼啪声等问题,以及减少音频延迟。在之前的推文《关于 Android 音频延迟的最新动态》中曾介绍过,二十种最热门的设备使用 Oboe 后,平均延迟时间从 2017 年的 109 毫秒减少到现在的 39 毫秒。109 毫秒的监听延迟会听到干扰现场演唱的明显回响,而延迟 39 毫秒则低于实时应用可接受的阈值。当下高端设备的延迟时间都在 22 毫秒以内,这种一致性是一大优势。Smule 使用 Oboe 后,或许是因为延迟时间更短,歌手借助 Smule 首屈一指的音频效果演唱时能通过耳机听到自己的声音,同时又没有回响,录制完成率因此得以提升。利用 Oboe 专用的高效协作式 GitHub 门户,Google 团队发挥了重要作用,不但帮助 Smule 实现 Oboe 集成,还为其提供重要的数据洞察和支持。两家团队通力合作,完成了迄今最大的 Oboe 部署,数百万活跃用户受益匪浅。Smule 团队解决了某些 Oboe 代码问题,而 Google 团队与部分移动设备制造商一起进一步增强了 Oboe 的兼容性。对于歌手社区而言,音频质量至关重要,我们一起致力于帮助 Smule 提供最佳体验,并助力音乐创作,我们为此深感欣慰。
既然是大规模部署,自然会面临设备特定问题。例如,操作系统内置功能会导致原始音频流中出现回响声效,造成 Smule 不能正常应用自己的专利 DSP 算法和音频滤波器。Google 团队立即施以援手,迅速为开发库提供更新和补丁。Oboe 问题反馈的流程简单,描述明确,便于 Google 团队及时解决。Smule 还克服了其他设备特定障碍,其中包括特定芯片组错误。比如,Oboe 需要单声道麦克风输入时,一些设备提供的是引入一个模拟单声道麦克风输入的立体声输入。Smule 在 Oboe 的 GitHub 中创建工单,以提供示例并使用 Oboe 测试应用重现此问题。
- Oboe 的 GitHub
https://github.com/google/oboe
Google 开发的 Oboe 测试器应用工具可帮助用户在实现过程中解决和标识问题。事实证明,此工具在测试 Oboe、AAudio 和 OpenSL ES 的许多功能、测试 Android 设备,以及衡量延迟时间和故障等方面特别有用。此应用可提供大量有助于模拟绝大部分音频设置的功能。Oboe 测试器还可用于自动化测试,方法是使用 Android Intent 从 Shell 脚本启动。由于集成涉及大量设备,Smule 非常依赖自动化测试。
- Oboe 测试器应用
https://github.com/google/oboe/tree/master/apps/OboeTester/docs
在 Smule 确信已解决设备特定问题,并且 Oboe 音频相当稳定后,Smule 改用大范围的对比测试发布方式。短短几周内,Smule 将使用 Oboe 的人群从目标设备的 10% 增加到 100%,这得益于 Oboe 在发布期间不断收到积极反馈和绿色 KPI 指标。结果不言而喻,使用 Oboe 的 Smule 用户会唱更多歌,就这么简单。不重复的卡拉 OK 录制量以及合唱 (或二重奏) 增加了高达 8.07%,不重复的上传量增加了 3.84%,而演唱完成率则增加了 4.10% 以上。Smule 观察到,在 2021 年第三季度和第四季度,录制完成率增加了 10% 以上。使用 Google 提供的 Firebase Crashlytics 工具,Smule 发现自 Oboe 全面应用以来,与音频相关的崩溃减少,应用更稳定,即便使用低端设备也如此。Smule 敬业的客服团队发现,与音频相关的投诉减少了 33%,其中包括 (非预期的) 机器人音效和回响等问题的投诉。- Firebase Crashlytics
https://firebase.google.cn/docs/crashlytics
改用 Oboe 的决策已颇有成效。此应用不同以往,更稳定更出类拔萃,Smule 完全能够采用更新技术,进一步提升音频和硬件质量。最重要的是,Smule 用户可以更得心应手地制作音乐,这才是我们的使命。您可以通过下方二维码或在文章底部私信,向我们提交反馈,分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!
点击屏末 | 阅读原文 | 即刻了解更多应用质量优化的相关内容